import axios from "axios";
import { ElMessage } from 'element-plus';
import { useTokenStore } from '@/stores/token.js';
import router from "@/router/index.js";

// 创建axios请求器
const instance = axios.create({
    baseURL: "http://localhost:8080",
    // Mock数据baseURL:"http://127.0.0.1:4523/m1/3998809-3634676-default",
    timeout: 5000,
});

instance.interceptors.request.use(
    (config)=>{
        //在发送请求之前做什么
        let tokenStore = useTokenStore()
        //如果token中有值，在携带
        if(tokenStore.token){
            config.headers.token=tokenStore.token
        }
        return config
    },
    (err)=>{
        //如果请求错误做什么
        return Promise.reject(err)
    }
)

instance.interceptors.response.use(
    result => {
        //如果业务状态码为0，代表本次操作成功
        if (result.data.code === 0) {
            return result.data;
        }
        //代码走到这里，代表业务状态码不是0，本次操作失败
        ElMessage.error(result.data.message || '服务异常');
        return Promise.reject(result.data);//异步的状态转化成失败的状态
    },
    err => {
        if (err.response.status === 401){
            ElMessage.error("请先登录")
            router.push("/login")
        }
        else{
        ElMessage.error('服务异常');
        return Promise.reject(err);//异步的状态转化成失败的状态
        }
    }
)

export function get(url, params) {
    return instance.get(url, { params })
        .then(response => {     //请求成功处理逻辑

            return response.data;
        })
        .catch(error => {   //请求失败处理逻辑

            throw error;
        });
}

export function post(url, params) {
    return instance.post(url, JSON.stringify(params),{
        headers: {'Content-Type': 'application/json'}
    })
        .then(response => {     //请求成功处理逻辑

            return response.data;
        })
        .catch(error => {   //请求失败处理逻辑

            throw error;
        })
}

export function put(url, params) {
    return instance.put(url, JSON.stringify(params),{
        headers: {'Content-Type': 'application/json'}
    })
        .then(response => {     //请求成功处理逻辑

            return response.data;
        })
        .catch(error => {   //请求失败处理逻辑

            throw error;
        })
}

export function del(url, params) {
    return instance.delete(url,{params})
        .then(response => {     //请求成功处理逻辑

            return response.data;
        })
        .catch(error => {   //请求失败处理逻辑

            throw error;
        });
}